/*
# File    :   err_code.h
# Author  :   SCHIPS
# Mail    :   schips@dingtalk.com
# Date    :   Thu, May 16, 2019  3:25:10 PM
*/
#ifndef ERR_CODE_H_
#define ERR_CODE_H_

// 定义错误码数据类型
#define _ERR_TYPE unsigned int
typedef _ERR_TYPE ERR_CODE   ;
typedef _ERR_TYPE ERR_CLASS  ;
typedef _ERR_TYPE ERR_NUMBER ;
typedef _ERR_TYPE OK_CODE    ;

// 错误码分为 大类 与 小类， 
// 大类一共可以有 2^10 = 1024 
// 一个大类中，可以有 2^22 = 4194304
static const char CLASS_BIT  = 10;
static const char NUMBER_BIT = 22;



/* OK CODE ZONE */
static const OK_CODE OK = 0;

/* ERR CODE ZONE  */
static const ERR_CLASS  NET_ERR = 0x100;
static const ERR_NUMBER NET_TIMEOUT = 0x100;


static inline ERR_CODE get_err_code(ERR_CLASS err_class, ERR_NUMBER err_number)
{
    return ((err_class)<<(NUMBER_BIT))| (err_number);
}

static inline ERR_CLASS get_err_class(ERR_CODE code)
{
    return (code)>>NUMBER_BIT ;
}

static inline ERR_NUMBER get_err_number(ERR_CODE code)
{
    return (code <<CLASS_BIT) >> CLASS_BIT;
}

#endif /* ifndef ERR_CODE_H_ */
